/**
 * @function: jpg图片压缩类
 * @modify history
 * Date           Author            Description
 * --------------------------------------------------------
 * 2010/01/12     fan.kebin         Created
 *  
 */
package com.byxm.wlgw.common;
import java.io.File;
import  java.io. * ;
import  java.awt. * ;
import  java.awt.image. * ;
import  com.sun.image.codec.jpeg. * ;

public class ZipJpg {

	private  String destFile;
	private   int  width;
	private   int  height;
	private  Image img;
	
	/** 
	 * 该类只压缩JPG格式的图片
	 * srcPathFile:需要压缩的图片文件[含绝对路径]
	 * destFileName:压缩后的文件名
	 */ 
	public  ZipJpg(String srcPathFile,String destFileName)  throws  IOException   {
		//读入要压缩的图片文件 
		File _file  =   new  File(srcPathFile);  	
		this .destFile  =   destFileName;
		img  =  javax.imageio.ImageIO.read(_file);  // 构造Image对象 
		width  =  img.getWidth( null );  // 得到源图宽 
		height  =  img.getHeight( null );  // 得到源图长 
	} 
	
	/** 
	 * 强制压缩/放大图片到固定的大小
	 *  @param  w int 新宽度
	 *  @param  h int 新高度
	 *  @throws  IOException
	 */ 
	public   void  resize( int  w,  int  h)  throws  IOException   {
		BufferedImage _image  =   new  BufferedImage(w, h,BufferedImage.TYPE_INT_RGB);
		_image.getGraphics().drawImage(img,  0 ,  0 , w, h,  null );  // 绘制缩小后的图 
		FileOutputStream out  =   new  FileOutputStream(destFile);  // 输出到文件流 
		JPEGImageEncoder encoder  =  JPEGCodec.createJPEGEncoder(out);
		encoder.encode(_image);  // 近JPEG编码 
		out.close();
	} 
	
	
	/**
	 * 按照固定的比例缩放图片
	 *  @param  t double 比例
	 *  @throws  IOException
	 */ 
	public   void  resize( double  t)  throws  IOException   {
		int  w  =  ( int ) (width  *  t);
		int  h  =  ( int ) (height  *  t);
		resize(w, h);
	} 
	
	/** 
	 * 以宽度为基准，等比例放缩图片
	 *  @param  w int 新宽度
	 *  @throws  IOException
	 */ 
	public   void  resizeByWidth( int  w)  throws  IOException   {
		int  h  =  ( int ) (height  *  w  /  width);
		resize(w, h);
	} 
	
	/** 
	 * 以高度为基准，等比例缩放图片
	 *  @param  h int 新高度
	 *  @throws  IOException
	 */ 
	public   void  resizeByHeight( int  h)  throws  IOException   {
		int  w  =  ( int ) (width  *  h  /  height);
		resize(w, h);
	} 
	
	/** 
	 * 按照最大高度限制，生成最大的等比例缩略图
	 *  @param  w int 最大宽度
	 *  @param  h int 最大高度
	 *  @throws  IOException
	 */ 
	public   void  resizeFix( int  w,  int  h)  throws  IOException   {
		if  (width  /  height  >  w  /  h)   {
			resizeByWidth(w);
		}  else {
			resizeByHeight(h);
		} 
	} 
	/**
	 * 获取目标文件名
	 */ 
	public  String getDestFile()   {
		return  destFile;
	} 
	
	/** 
	 * 获取图片原始宽度
	 */ 
	public   int  getSrcWidth()   {
		return  width;
	} 
	
	/** 
	 * 获取图片原始高度
	 */ 
	public   int  getSrcHeight()   {
		return  height;
	} 
} 
